/*
 * main.c
 *
 *  Created on: Nov 21, 2013
 *      Author: enano
 */


#include <stdio.h>
#include "TDA_DNS.h"
#include <string.h>

#define OK 0
#define INICIO 0
#define MAX_LONG 256

#define ADD "add"
#define GET "get"
#define LIST "list"
#define RM "rm"
#define QUIT "quit"


void mostrarListaIntercambio( TListaSimple lista, char* domBusq );
void vaciarListaIntercambio( TListaSimple* lista);
int DominioTienePunto( char* str );

int main(int argc, char **argv)
{
    TDADNS dns;
    char dominio[MAX_LONG], command[10] = {'\0'}, IP[IPv4], dato[IPv4];
    int resultado = TRUE ;
    TListaSimple ls;

    L_Crear( &ls, sizeof(elemInter) );

    crearDNS( &dns, IPv4 * sizeof(char) );

    while ( strcmp( QUIT, command ) != 0 )
    {
        //scanf("%s",dominio);
        gets( dominio );
        sscanf (dominio,"%s %s %s",command, dominio, IP);

        if (strcmp(ADD,command)==0)
        {
            if ( DominioTienePunto(IP) && DominioTienePunto(dominio) )
            {
                resultado=agregarDominio(&dns, dominio,IP);
                if (resultado==TRUE) printf("OK\n");
                else printf("ERROR=%d\n",resultado);
            }
            else printf("ERROR=1\n");
        }
        else if (strcmp(GET,command)==0)
            {
                resultado=existeDominio(dns, dominio );
                if (resultado==FALSE)
                    printf("ERROR=%d\n",resultado);
                else
                {
                    obtenerValor( dns, dominio, dato );
                    printf("OK=%s\n", dato);
                }
            }
            else if (strcmp(LIST,command)==0)
            {
                resultado=existeDominio(dns, dominio );
                if (resultado==FALSE)
                    printf("ERROR=%d\n",resultado);
                else
                {
                    resultado = obtenerLista(dns, dominio, &ls);
                    if (resultado==TRUE)
                    {
                        //printf("Subdominios de %s\n", dominio);
                        mostrarListaIntercambio( ls, dominio );
                        vaciarListaIntercambio( &ls );
                    }
                    else printf("ERROR=%d\n",resultado);
                }
            }
                else if (strcmp(command,RM)==0)
                {
                    resultado=existeDominio(dns, dominio );
                    if (resultado==FALSE)
                        printf("ERROR= %d\n",resultado);
                    else
                    {
                        eliminarDominio( &dns, dominio );
                        printf("OK\n");
                    }
                }
                else if (strcmp(command, QUIT)==0)
                {
                        if(L_Vacia(dns.dominios)==FALSE)
                            destruirDNS( &dns );
                        return OK;
                }
        }

}


int DominioTienePunto( char* str )
{
    char* pch;
    int count = INICIO;

    pch = strchr( str,'.' );
    while (pch!=NULL)
    {
        count++;
        pch=strchr( pch+1, '.' );
    }

    return count;
}

void vaciarListaIntercambio( TListaSimple* lista)
{   elemInter elem;

    if ( L_Vacia( *lista ) == TRUE ) return;

    L_Mover_Cte( lista, L_Primero );
    while ( L_Vacia( *lista ) == FALSE )
    {
        L_Elem_Cte( *lista, &elem );
        free(elem.dominio);
        free(elem.data);
        L_Mover_Cte( lista, L_Siguiente );

    }

    return;
}

void mostrarListaIntercambio( TListaSimple lista, char* domBusq )
{   elemInter elem;

    if ( L_Vacia(lista) == TRUE ) return;

    L_Mover_Cte( &lista, L_Primero );
    do
    {
        L_Elem_Cte( lista, &elem );
        printf( "OK=%s.%s %s\n", elem.dominio, domBusq, (char*) elem.data );

    }while( L_Mover_Cte( &lista, L_Siguiente ) == TRUE );

    return;
}






